<?php
// 应用公共文件
use  think\facade\Env;

use PhpOffice\PhpSpreadsheet;

if (!function_exists('pr')) {
    /**
     * 数据调试打印
     * @param $var
     */
    function pr($var)
    {
        if (true) {
            if (function_exists('debug_backtrace')) {
                $debug = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1);
                if (isset($debug[0]['function']) && $debug[0]['function'] == 'pr') {
                    $template = PHP_SAPI !== 'cli' ? '<pre style="color:blue;">%s</pre>' : "\n%s\n";
                    printf($template, print_r('in ' . $debug[0]['file'] . " line " . $debug[0]['line'] . ' :', true));
                }
            }
            $template = PHP_SAPI !== 'cli' ? '<pre style="color:red;">%s</pre>' : "\n%s\n";
            printf($template, print_r($var, true));
        }
    }
}

if (!function_exists('curl_file_exist')) {
    /**
     * CURL 检测远程文件是否在
     * @param $url
     * @return bool
     */
    function curl_file_exist($url)
    {
        $ch = curl_init();
        try {
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_HEADER, 1);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
            $contents = curl_exec($ch);
            if (preg_match("/404/", $contents)) return false;
            if (preg_match("/403/", $contents)) return false;
            return true;
        } catch (\Exception $e) {
            return false;
        }
    }
}


if (!function_exists('time_tran')) {
    /**
     * 时间戳人性化转化
     * @param $time
     * @return string
     */
    function time_tran($time)
    {
        $t = time() - $time;
        $f = array(
            '31536000' => '年',
            '2592000' => '个月',
            '604800' => '星期',
            '86400' => '天',
            '3600' => '小时',
            '60' => '分钟',
            '1' => '秒'
        );
        foreach ($f as $k => $v) {
            if (0 != $c = floor($t / (int)$k)) {
                return $c . $v . '前';
            }
        }
    }
}


/**
 * get curl请求
 */
function httpGet($url, $Headers = '')
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 500);

    $CURLOPT_HTTPHEADER_DATA = array(
        'Cache-Control: no-cache',
        'Pragma: no-cache'
    );
    if (!empty($Headers)) {
        $CURLOPT_HTTPHEADER_DATA[] = $Headers;
    }
    curl_setopt($curl, CURLOPT_HTTPHEADER, $CURLOPT_HTTPHEADER_DATA);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_URL, $url);
    $res = curl_exec($curl);
    curl_close($curl);
    return $res;
}

/**
 * form curl请求
 */
function http_post($url, $data, $Headers = '', $type = "POST")
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $type);
    if (ini_get('open_basedir') == '' && ini_get('safe_mode' == 'Off')) {
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    }
    curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $CURLOPT_HTTPHEADER_DATA = [];
    if (!empty($Headers)) {
        $CURLOPT_HTTPHEADER_DATA[] = $Headers;
    }
    curl_setopt($ch, CURLOPT_HTTPHEADER, $CURLOPT_HTTPHEADER_DATA);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $tmpInfo = curl_exec($ch);

    curl_close($ch);
    return $tmpInfo;
}


/**
 * json curl POST请求
 */
function json_post($url, $data = NULL, $Headers = '')
{
    var_dump($data,1112);

    $curl = curl_init();

    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    if (!$data) {
        return 'data is null';
    }
    if (is_array($data)) {
        $data = json_encode($data);
    }
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    curl_setopt($curl, CURLOPT_HEADER, 0);

    $CURLOPT_HTTPHEADER_DATA = array(
        'Content-Type: application/json; charset=utf-8',
        'Content-Length:' . strlen($data),
        'Cache-Control: no-cache',
        'Pragma: no-cache'
    );
    if (empty($data)) unset($CURLOPT_HTTPHEADER_DATA[1]);

    if (!empty($Headers)) {
        $CURLOPT_HTTPHEADER_DATA[] = $Headers;
    }

    curl_setopt($curl, CURLOPT_HTTPHEADER, $CURLOPT_HTTPHEADER_DATA);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $res = curl_exec($curl);
    $errorno = curl_errno($curl);
    if ($errorno) {
        return $errorno;
    }
    curl_close($curl);
    return $res;
}


/**
 * 获得随机字符串
 * @param $len      integer       需要的长度
 * @param $special  bool      是否需要特殊符号
 * @return string       返回随机字符串
 */
function random_string($len = 6, $special = false)
{
    $chars = array(
        "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
        "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
        "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
        "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
        "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",
        "3", "4", "5", "6", "7", "8", "9"
    );

    if ($special) {
        $chars = array_merge($chars, array(
            "!", "@", "#", "$", "?", "|", "{", "/", ":", ";",
            "%", "^", "&", "*", "(", ")", "-", "_", "[", "]",
            "}", "<", ">", "~", "+", "=", ",", "."
        ));
    }

    $charsLen = count($chars) - 1;
    shuffle($chars);                            //打乱数组顺序
    $str = '';
    for ($i = 0; $i < $len; $i++) {
        $str .= $chars[mt_rand(0, $charsLen)];    //随机取出一位
    }
    return $str;
}


/**
 * PhpSpreadsheet导出 非队列时调用该方法
 * @param $expTitle    文件名称
 * @param $expCellName 字段参数 表头
 * @param $expTableData  表数据
 * @param $img  图片字母行
 * @param $is_paths 1导出base64 2导出文件网络地址
 */
function exportExcel($expTitle, $expCellName, $expTableData, $img = '', $is_paths = 2)
{

    $xlsTitle = iconv('utf-8', 'gb2312', $expTitle);//文件名称
    $cellNum = count($expCellName);
    $dataNum = count($expTableData);

    $spreadsheet = new PhpSpreadsheet\Spreadsheet();
    $sheet = $spreadsheet->getActiveSheet();

    $cellName = array(
        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
        'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL',
        'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ'
    );


    /** @var 设置水平居中 $styleArray */
    $styleArray = [
        'alignment' => [
            'horizontal' => 'center',
            'vertical' => 'center',
        ],
    ];
    /** 设置表头 */
    for ($t = 0; $t < $cellNum; $t++) {
        $sheet->setCellValue($cellName[$t] . "1", $expCellName[$t][1]);
        $sheet->getColumnDimension($expCellName[$t][2])->setWidth($expCellName[$t][3]);//设置宽度
        $sheet->getStyle($cellName[$t] . "1")->applyFromArray($styleArray);
    }
    //临时文件
    $tempnam_file = [];
    /** 开始从数据库提取信息插入Excel表中 */
    for ($i = 2; $i < $dataNum + 2; $i++) {
        for ($j = 0; $j < $cellNum; $j++) {
            //设置行高为100pt。
            $spreadsheet->getActiveSheet()->getRowDimension($i)->setRowHeight(100);
            //导出带图片
            if ($cellName[$j] == $img && !empty($img)) {
                //先下载图片到本地
                $tempFilePath = tempnam(sys_get_temp_dir(), 'image'); // 生成一个临时文件名
                file_put_contents($tempFilePath, file_get_contents($expTableData[$i - 2][$expCellName[$j][0]]));
                $tempnam_file[] = $tempFilePath;
                $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
                $drawing->setWorksheet($sheet);
                $drawing->setPath($tempFilePath);//路径
                $drawing->setWidth(50);//图片宽
                $drawing->setHeight(50);//图片高
                $drawing->setOffsetX(50);//设置图片偏移量
                $drawing->setOffsetY(50);//设置图片偏移量
                $drawing->setCoordinates($cellName[$j] . $i);//将图片放置于单元格
            } else {
                $sheet->setCellValue($cellName[$j] . $i, $expTableData[$i - 2][$expCellName[$j][0]]);
                $sheet->getStyle($cellName[$j] . $i)->getAlignment()->setWrapText(true);
                $sheet->getStyle($cellName[$j] . $i)->applyFromArray($styleArray);
            }
        }
    }
    //导出文件类型
    if ($is_paths == 1) {
        // 导出Excel文件
        $writer = new PhpSpreadsheet\Writer\Xlsx($spreadsheet);
        $path = "xlsx/hk_consumer_msg/{$expTitle}.xlsx";
        $writer->save($path);
        unset($spreadsheet);
        //删除临时文件
        if (!empty($tempnam_file)) {
            foreach ($tempnam_file as $val) {
                unlink($val);
            }
        }
        return $path;
    } else {
        //Ajax导出表格base64格式
        header('Content-Type: application/vnd.ms-excel;charset=utf-8;');
        header("Content-Disposition: attachment;filename={$xlsTitle}.xlsx");
        header('Cache-Control: max-age=0');
        $writer = new PhpSpreadsheet\Writer\Xlsx($spreadsheet);
        ob_start(); //把数据存到缓冲区
        $writer->save('php://output');//输出流用法
        $xlsData = ob_get_contents(); //得到缓冲区的数据
        ob_end_clean(); //清除缓冲区的内容，并将缓冲区关闭，但不会输出内容。
        $val = "data:application/vnd.ms-excel;base64," . base64_encode($xlsData);
        return $val;
    }
}


/**
 * @param $time1
 * @param $time2
 * @return array
 * 时间从大到小排序
 */
function timeWhere($time1, $time2)
{
    $list = [
        strtotime($time1),
        strtotime($time2),
    ];
    sort($list);
    return $list;
}

/**
 * 获取毫秒时间戳
 * 获取多少天后的时间  date('Y-m-d H:i:s' ,strtotime('+10 day 23:00:00'))
 */
function hmTime()
{
    return floor(microtime(true) * 1000);
}


/**
 * 生成随机纯数字
 */
function getrandstr($len = 6)
{
    $str = '1234567890';
    $randStr = str_shuffle($str);//打乱字符串
    $rands = substr($randStr, 0, $len);//substr(string,start,length);返回字符串的一部分
    return $rands;
}


if (!function_exists('get_file_url')) {
    /**
     * 获文件预览链接
     * @param $file
     */
    function get_file_url($file = '')
    {
        if (empty($file)) return '';
        if (strpos($file, "http://") === 0) {
            return $file;
        } else if (strpos($file, "https://") === 0) {
            return $file;
        } else {
            $domain = request()->domain() . '/';
            return $domain . $file;
        }
    }
}


/**
 * 找到无限下级
 * @param $members 要找的数组
 * @param $mid 父级id
 * @param int $level
 * @return array
 */
function get_downline($members, $mid, $level = 0)
{
    $arr = [];
    foreach ($members as $key => $v) {
        if ($v['parent_id'] == $mid) {  //pid为0的是顶级分类
            $v['level'] = $level + 1;
            $arr[] = $v;
            $arr = array_merge($arr, get_downline($members, $v['id'], $level + 1));
        }
    }
    return $arr;
}

if (!function_exists('desensitization')) {
    /**
     * 脱敏处理
     * @param string $string 脱敏的字符串
     * @return string
     */
    function desensitization($string = '')
    {
        if (empty($string)) {
            return $string;
        }
        return preg_replace('/(1[358]{1}[0-9])[0-9]{4}([0-9]{4})/i', '$1****$2', $string);
    }
}


/**
 * 压缩图片
 * @param string $sourceImagePath 原始图片路径
 * @param string $compressedImagePath 压缩后的图片路径
 * @param int $quality 压缩质量（0-100之间的整数）
 * @return bool 压缩成功返回true，失败返回false
 */
function compressImage($sourceImagePath, $compressedImagePath, $quality = 80)
{
    // 获取图片信息
    $imageInfo = getimagesize($sourceImagePath);

    // 根据图片类型创建资源
    switch ($imageInfo[2]) {
        case IMAGETYPE_JPEG:
            $sourceImage = imagecreatefromjpeg($sourceImagePath);
            break;
        case IMAGETYPE_PNG:
            $sourceImage = imagecreatefrompng($sourceImagePath);
            break;
        case IMAGETYPE_GIF:
            $sourceImage = imagecreatefromgif($sourceImagePath);
            break;
        default:
            return false; // 不支持的图片类型
    }

    // 读取原始图片的EXIF数据
    $exif = exif_read_data($sourceImagePath);

    // 判断是否有旋转信息
    if (!empty($exif['Orientation'])) {
        // 根据旋转信息对原始图片进行旋转
        switch ($exif['Orientation']) {
            case 3:
                $sourceImage = imagerotate($sourceImage, 180, 0);
                break;
            case 6:
                $sourceImage = imagerotate($sourceImage, -90, 0);
                break;
            case 8:
                $sourceImage = imagerotate($sourceImage, 90, 0);
                break;
        }
    }

    // 创建压缩后的图片资源
    $compressedImage = imagecreatetruecolor($imageInfo[0], $imageInfo[1]);

    // 复制旋转后的原始图片到压缩后的图片并进行压缩
    imagecopyresampled($compressedImage, $sourceImage, 0, 0, 0, 0, $imageInfo[0], $imageInfo[1], $imageInfo[0], $imageInfo[1]);

    // 保存压缩后的图片
    $result = imagejpeg($compressedImage, $compressedImagePath, $quality);

    // 释放资源
    imagedestroy($sourceImage);
    imagedestroy($compressedImage);

    return $result;
}


if (!function_exists('Tiktok_sign')) {
    /**
     * 抖音支付签名
     * @param $map 例:['total_amount'=>11,'subject'=>11]
     * @return string
     */
    function Tiktok_sign($map)
    {
        $rList = array();
        foreach ($map as $k => $v) {
            if ($k == "other_settle_params" || $k == "app_id" || $k == "sign" || $k == "thirdparty_id")
                continue;
            $value = trim(strval($v));
            $len = strlen($value);
            if ($len > 1 && substr($value, 0, 1) == "\"" && substr($value, $len, $len - 1) == "\"")
                $value = substr($value, 1, $len - 1);
            $value = trim($value);
            if ($value == "" || $value == "null")
                continue;
            array_push($rList, $value);
        }
        array_push($rList, "your_payment_salt");
        sort($rList, 2);
        return md5(implode('&', $rList));
    }
}

if (!function_exists('filterJs')) {
    /**
     * 过滤XSS攻击
     * @param string $str
     * @return string|string[]
     */
    function filterJs($str = '')
    {
        if (empty($str)) return '';
        $str = preg_replace("@<script(.*?)</script>@is", "", $str);
        $str = preg_replace("@<iframe(.*?)</iframe>@is", "", $str);
        //  $str = preg_replace("@<style(.*?)</style>@is", "", $str);
        $str = preg_replace("@<(.*?)>@is", "", $str);
        //# 代表换行
        $str = str_replace("#", "<br>", $str);
        return $str;
    }
}
if (!function_exists('hmac_md5')) {
    function hmac_md5($data, $key)
    {
        // 将数据和密钥编码为UTF-8
        $data = mb_convert_encoding($data, 'UTF-8');
        $key = mb_convert_encoding($key, 'UTF-8');

        // 使用hash_hmac函数计算HMAC摘要
        $digest = hash_hmac('md5', $data, $key, true);

        // 使用bin2hex函数将摘要转换为Hex格式
        $hexDigest = bin2hex($digest);

        // 返回Hex格式的摘要
        return $hexDigest;
    }
}
if (!function_exists('ajaxJson')) {
    function ajaxJson($code = 1, $msg = '', $data = [])
    {
        return json([
            'code' => $code,
            'msg' => $msg,
            'data' => $data
        ]);
    }
}
if (!function_exists('getFirstLetter')) {
    /**
     * 获取中文拼音首字母
     * @param $s0 中文
     * @return string|null
     */
    function getFirstLetter($s0)
    {
        $fchar = ord($s0[0]);
        if ($fchar >= ord("A") and $fchar <= ord("z")) return strtoupper($s0[0]);
        $s1 = iconv("UTF-8", "gb2312", $s0);
        $s2 = iconv("gb2312", "UTF-8", $s1);
        if ($s2 == $s0) {
            $s = $s1;
        } else {
            $s = $s0;
        }
        $asc = ord($s[0]) * 256 + ord($s[1]) - 65536;
        if ($asc >= -20319 and $asc <= -20284) return "A";
        if ($asc >= -20283 and $asc <= -19776) return "B";
        if ($asc >= -19775 and $asc <= -19219) return "C";
        if ($asc >= -19218 and $asc <= -18711) return "D";
        if ($asc >= -18710 and $asc <= -18527) return "E";
        if ($asc >= -18526 and $asc <= -18240) return "F";
        if ($asc >= -18239 and $asc <= -17923) return "G";
        if ($asc >= -17922 and $asc <= -17418) return "H";
        if ($asc >= -17922 and $asc <= -17418) return "I";
        if ($asc >= -17417 and $asc <= -16475) return "J";
        if ($asc >= -16474 and $asc <= -16213) return "K";
        if ($asc >= -16212 and $asc <= -15641) return "L";
        if ($asc >= -15640 and $asc <= -15166) return "M";
        if ($asc >= -15165 and $asc <= -14923) return "N";
        if ($asc >= -14922 and $asc <= -14915) return "O";
        if ($asc >= -14914 and $asc <= -14631) return "P";
        if ($asc >= -14630 and $asc <= -14150) return "Q";
        if ($asc >= -14149 and $asc <= -14091) return "R";
        if ($asc >= -14090 and $asc <= -13319) return "S";
        if ($asc >= -13318 and $asc <= -12839) return "T";
        if ($asc >= -12838 and $asc <= -12557) return "W";
        if ($asc >= -12556 and $asc <= -11848) return "X";
        if ($asc >= -11847 and $asc <= -11056) return "Y";
        if ($asc >= -11055 and $asc <= -10247) return "Z";
        return NULL;
    }
}


if (!function_exists('generateRandomNumber')) {
    /**
     * 合并生成随机数
     * @param $length 输出长度
     * @param $id
     * @return string
     */
    function generateRandomNumber($length, $id)
    {
        $idLength = strlen((string)$id); // 获取 $id 的长度
        $remainingLength = $length - $idLength; // 计算生成随机数所需的剩余长度

        if ($remainingLength <= 0) {
            return (string)$id; // 如果剩余长度小于等于0，则直接返回 $id
        }

        $randomNumber = ""; // 初始化随机数字符串
        for ($i = 0; $i < $remainingLength; $i++) {
            $randomNumber .= rand(0, 9); // 生成随机数并拼接到随机数字符串上
        }

        $mergedNumber = (string)$id . $randomNumber; // 将 $id 和随机数拼接

        return $mergedNumber;
    }

}


/**
 * 获取文件大小 返回的KB单位
 * @param $filePath 文件地址
 * @return float|string
 */
function getFileSizeInKB($filePath)
{
    if (file_exists($filePath)) {
        $fileSize = filesize($filePath);
        $kilobytes = $fileSize / 1024;
        return round($kilobytes, 2); // 四舍五入保留两位小数
    } else {
        return "文件不存在";
    }
}

/**
 * 数形式找子级
 * @param $list 循环的主体
 * @param array $select 已选择的数组
 * @param string $checked 是否选中字段
 * @param string $pk 主键
 * @param string $pid 父级id
 * @param string $child 子级数组
 * @param int $root 最顶层标识
 * @return array
 */
function make_tree($list, $select = [], $checked = 'checked', $pk = 'id', $pid = 'parent_id', $child = 'children', $root = 0)
{
    if (empty($list)) {
        return [];
    }
    $tree = array();
    $packData = array();
    foreach ($list as $data) {
        //没有二级给个空数组
        $data[$child] = null;

        $packData[$data[$pk]] = $data;
    }
    foreach ($packData as $key => $val) {
        //layui全部展开
        $packData[$key]['spread'] = true;
        //是否存在
        $packData[$key][$checked] = in_array($val['id'], $select) ? true : false;
        if ($val[$pid] == $root) {//代表最顶级
            $tree[] =& $packData[$key];
        } else {
            //找到其父类
            $packData[$val[$pid]][$child][] =& $packData[$key];
        }
    }
    return $tree;
}

if (!function_exists('downloadImage')) {
    /**
     * 网络图片下载到本地
     * @param $imageURL 网络地址
     * @param $localPath 服务器地址
     * @return bool
     */
    function downloadImage($imageURL, $localPath)
    {
        $ch = curl_init($imageURL);
        $fp = fopen($localPath, 'wb');

        curl_setopt($ch, CURLOPT_FILE, $fp);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 60);

        $result = curl_exec($ch);
        curl_close($ch);
        fclose($fp);
        if ($result !== false) {
            // 设置文件权限为775
            chmod($localPath, 0775);
            return true;
        } else {
            return false;
        }
    }
}

if (!function_exists('storeBase64Image')) {
    /**
     * base64存储文件
     * @param $base64Image 文件
     * @param $fileType 文件后缀
     * @return string
     */
    function storeBase64Image($base64Image, $fileType = 'jpg')
    {
        // 解码Base64字符串
        $decodedImage = base64_decode($base64Image);

        $directory = 'warning_img/' . date('Ymd');
        if (!file_exists($directory)) mkdir($directory, 0775, true);
        // 生成一个唯一的文件名
        $filename = $directory . '/' . uniqid() . '.' . $fileType;
        // 将解码后的二进制数据写入文件
        file_put_contents($filename, $decodedImage);
        // 存储图像的文件路径
        $imagePath = $filename;
        // 返回图像路径
        return $imagePath;
    }
}


/**
 * 根据年月日范围生成数组
 * @param $startDate
 * @param $endDate
 * @param $format
 * @return array
 */
function generateDateRangeArray($startDate, $endDate, $format = 'Y-m-d')
{
    $dateRangeArray = array();

    $currentDate = strtotime($startDate);
    $endDate = strtotime($endDate);

    while ($currentDate <= $endDate) {
        $dateRangeArray[] = date($format, $currentDate);
        $currentDate = strtotime('+1 day', $currentDate);
    }
    return $dateRangeArray;
}

/**
 * UTF-8转GB2312再转16进制字符串
 * @param $str string 转换的字符串
 * @return string 16进制字符串
 */
function bin2hexGB2312($str)
{
    $gb2312String = iconv("UTF-8", "GB2312", $str);
    return bin2hex($gb2312String);
}
